home *** CD-ROM | disk | FTP | other *** search
/ BMUG Revelations / BMUG Revelations.toast / Utilities / Random / Commodore 64c / SOURCE / 68K.c < prev    next >
C/C++ Source or Header  |  1994-03-12  |  2KB  |  104 lines

  1. #include <asm.h>
  2. #include "ProcessorTypes.h"
  3. #include "Registers.h"
  4. #include "Modes.h"
  5. #include "Memory.h"
  6.  
  7. #define EA    d0
  8. #define PC    d1
  9. #define X    d2
  10. #define Y    d3
  11. #define A    d4
  12. #define FL    d5
  13. #define TD1    d6
  14. #define TD2 d7
  15.  
  16. #define MEM    a0
  17. #define TA1    a1
  18. #define TA2    a2
  19. #define EAA    a3
  20.  
  21. #define BYTEAT(addr, store) \
  22.     moveq    #0, EA \
  23.     move.w    addr, EA \
  24.     lsl.l    #2, EA \
  25.     move.l    (MEM, EA.l), EAA \
  26.     move.b    (EAA), store \
  27.  
  28. #define WORDAT(addr, store) \
  29.     moveq    #0, EA \
  30.     move.w    addr, EA \
  31.     lsl.l    #2, EA \
  32.     movea.l    (MEM, EA.l), EAA \
  33.     move.b    (EAA)+, store \
  34.     lsl.w    #8, store \
  35.     or.b    (EAA), store
  36.     
  37. #define ZERO \
  38.     moveq    #0, TD1 \
  39.     BYTEAT(PC, TD1)
  40.  
  41. #define ZEROX \
  42.     moveq    #0, TD1 \
  43.     BYTEAT(PC, TD1) \
  44.     add.b    X, TD1
  45.  
  46. #define ZEROY \
  47.     moveq    #0, TD1 \
  48.     BYTEAT(PC, TD1) \
  49.     add.b    Y, TD1
  50.  
  51. #define INDX \
  52.     moveq    #0, TD2 \
  53.     BYTEAT(PC, TD2) \
  54.     add.b    X, TD2 \
  55.     moveq    #0, TD1 \
  56.     WORDAT(TD2, TD1)
  57.     
  58. #define INDY \
  59.     moveq    #0, TD2 \
  60.     BYTEAT(PC, TD2) \
  61.     moveq    #0, TD1 \
  62.     WORDAT(TD2, TD1) \
  63.     add.w    Y, TD1
  64.  
  65. #define ABS \
  66.     moveq    #0, TD1 \
  67.     WORDAT(PC, TD1)
  68.     
  69. #define ABSX \
  70.     moveq    #0, TD1 \
  71.     WORDAT(PC, TD1) \
  72.     add.w    X, TD1
  73.     
  74. #define ABSY \
  75.     moveq    #0, TD1 \
  76.     WORDAT(PC, TD1) \
  77.     add.w    Y, TD1
  78.  
  79. Test68k()
  80. {
  81.     unsigned long store68A[5], store68D[8];
  82.     word addrOld, addrNew;
  83.     Str255 str;
  84.     
  85.     asm {
  86.         movem.l a0-a4, store68A
  87.         movem.l d0-d7, store68D
  88.  
  89.         move.l memory, a1
  90.         move.l    #0x0001, PC
  91.         BYTEAT(PC, TD1)
  92.         move.w    TD1, addrNew
  93.     
  94.         movem.l    store68D, d0-d7
  95.         movem.l    store68A, a0-a4    
  96.     }
  97.     NumToString(addrNew, str);
  98.     DebugStr(str);
  99.     pc=0x0123;
  100.     addrOld=ByteAt(0x0001);
  101.     NumToString(addrOld, str);
  102.     DebugStr(str);
  103.     if (addrOld!=addrNew) DebugStr("\pBOOM");
  104. }